package main

import "fmt"

/*
给定一个整数数组和一个目标值，找出数组中和为目标值的 两个 数。

你可以假设每个输入只对应一种答案，且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
 */

 //solution1  有bug
func TwoSum(nums []int, target int) []int {
	for i := 0; i < len(nums); i++ {
 		for j:=i+1;i< len(nums);j++{
 			if nums[j] == target - nums[i]{
 				return []int{i,j}
			}
		}
	}
	return nil
}

//solution2
func TwoSum2(nums []int, target int) []int{
	result:= make(map[int]int)

	for i:=0;i<len(nums);i++{
		complement := target - nums[i]
		if n,ok := result[complement];ok{
			return []int{n,i}
		}
		result[nums[i]] = i
	}

	return nil
}


func main() {
	nums:=[]int{2,5,11,15,7,6}
	res:= TwoSum2(nums, 7)
	fmt.Println(res)
}
